#pragma once
#include <string>


/**
    Supported Geom File Extensions
*/
enum Geom_t {
    GF_BSP,         // Q3 .BSP
    GF_IRR,         // IRRLICHTS

    GF_UNKNOWN
};

/**
    Geometry Loader
*/
class IGeom;
class IGeomLoader
{
public:
    /** Load a Map */
    virtual IGeom* LoadGeom( const std::string &GeomFile )=0;

    virtual ~IGeomLoader() {};
};

class IRender;
class ICamera;
/**
    An interface to a map, which can be of type .bsp, .irr, etc..
*/
class IGeom
{
public:
    /** Initialize the map */
    virtual void        Init()=0;
    /** Render the map */
    virtual void        Render( IRender* r, ICamera* cam )=0;

    /** Free the Map */
    virtual void        FreeGeom()=0;
    /** Get map type */
    virtual Geom_t      GetType()=0;

    /** Get the name of the map */
    std::string GetName() { return m_name; };

protected:
    std::string     m_name;             // name of the map
    bool            m_loading;          // a new map is about to load
};